package gcode

// TableInfo 表基本信息结构
type TableInfo struct {
	// 表名
	Name string `json:"name"`
	// 类型（表或视图）
	Type string `json:"type"`
}

// TableConfig 表配置
type TableConfig struct {
	// 数据库名
	Database string
	// 表名
	TableName string
	// 模型名
	ModelName string
	// 是否使用驼峰命名
	UseCamelCase bool
}

// TableStructure 表结构详细信息
type TableStructure struct {
	// 表名
	Name string `json:"name"`
	// 引擎
	Engine string `json:"engine"`
	// 表注释
	Comment string `json:"comment"`
	// 创建时间
	CreateTime string `gorm:"column:create_time"`
	// 更新时间
	UpdateTime string `gorm:"column:update_time"`
	// 字段列表
	Columns []ColumnInfo `json:"columns" gorm:"-"`
	// 主键列表
	PrimaryKeys []string `json:"primaryKeys" gorm:"-"`
	// 索引列表
	Indexes []IndexInfo `json:"indexes" gorm:"-"`
}

// ColumnInfo 字段信息结构
type ColumnInfo struct {
	// 字段名
	Name string `json:"name"`
	// 字段类型
	Type string `json:"type"`
	// 键类型
	Key string `gorm:"column:column_key"`
	// 是否可空
	Nullable string `gorm:"column:is_nullable"`
	// 默认值
	DefaultValue string `gorm:"column:default_value"`
	// 额外信息
	Extra string `gorm:"column:column_extra"`
	// 注释
	Comment string `json:"comment"`
}

// IndexInfo 索引信息结构
type IndexInfo struct {
	// 索引名
	Name string `json:"name"`
	// 是否非唯一
	NonUnique int `gorm:"column:non_unique"`
	// 包含的字段，逗号分隔
	Columns string `json:"columns"`
}
